#ifndef STRUCT_OPEN_H_
#define STRUCT_OPEN_H_


/////////////////////////////////////////////////////////////////////////////////
///////////////////////////进行结构化 扩展/////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////


#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

// 添加为一个结构体 来进行便携式的扩展
static FILE * fptr = NULL;

typedef struct{
    int x;
    int y;
    int z;
}Vector;

Vector Vector_contruct(int a,int b,int c){

    Vector v;
    v.x = a;
    v.y = b;
    v.z = c;

    return v;
}
// 对于输出函数可以尽可能的少做其他的东西（单一功能就可以）
void Vector_print(char * name,Vector v){

    printf("%s is (%d %d %d).\n",name,v.x,v.y,v.z);
}
void Vector_writet(char * filename,Vector v){

    openFile(filename,"w");
    if(NULL == FileHdl()){

        return;
    }
    fprintf(fptr,"%d %d %d",v.x,v.y,v.z);
    fclose(fptr);
}

Vector Vector_readt(char * filename){

    Vector v = Vector_contruct(0,0,0);
    openFile(filename,"r");
    if(NULL == FileHdl()){

        return;
    }
    // 按照数字的格式读取数字 并 按照%d的总计返回
    if(fscanf(fptr,"%d %d %d",&v.x,&v.y,&v.z)!=3){

        printf("fprintf failed.\n");
    }
    fclose(fptr);
    return v;
}

void Vector_writeb(char * filename,Vector v){

    openFile(filename,"w");
    if(NULL == FileHdl()){

        printf("Vector_writeb fopen failed.\n");
        return;
    }
    if(fwrite(&v,sizeof(Vector),1,fptr)!=1){

        printf("fwrite failed.\n");
    }
    fclose(fptr);
}

Vector Vector_readb(char * filename){

    Vector v;
    openFile(filename,"r");
    if(NULL == fptr){

        printf("Vector_readb fopen failed.\n");
        return v;
    }
    if(fread(&v,sizeof(Vector),1,fptr)!=1){

        printf("fread failed.\n");
    }
    fclose(fptr);
    return v;
}
// 文件名称和打开类型 (对相同的代码进行统一的管理)
void openFile(char * fileName,char * method){

    fptr = fopen(fileName,method);
    if(NULL == fptr){

        printf("open file %s failed.\n",fileName);
        return;
    }
}

FILE * FileHdl(){

    return fptr;
}

#endif // !STRUCT_OPEN_H_